↳ Prolog
↳ PrologToPiTRSProof
perm_in(XS, cons(Y, YS)) → U3(XS, Y, YS, split_in(XS, YS1, cons(Y, YS2)))
split_in(cons(X, XS), cons(X, YS1), YS2) → U2(X, XS, YS1, YS2, split_in(XS, YS1, YS2))
split_in(XS, nil, XS) → split_out(XS, nil, XS)
U2(X, XS, YS1, YS2, split_out(XS, YS1, YS2)) → split_out(cons(X, XS), cons(X, YS1), YS2)
U3(XS, Y, YS, split_out(XS, YS1, cons(Y, YS2))) → U4(XS, Y, YS, YS1, YS2, append_in(YS1, YS2, ZS))
append_in(cons(X, XS1), XS2, cons(X, YS)) → U1(X, XS1, XS2, YS, append_in(XS1, XS2, YS))
append_in(nil, XS, XS) → append_out(nil, XS, XS)
U1(X, XS1, XS2, YS, append_out(XS1, XS2, YS)) → append_out(cons(X, XS1), XS2, cons(X, YS))
U4(XS, Y, YS, YS1, YS2, append_out(YS1, YS2, ZS)) → U5(XS, Y, YS, perm_in(ZS, YS))
perm_in(nil, nil) → perm_out(nil, nil)
U5(XS, Y, YS, perm_out(ZS, YS)) → perm_out(XS, cons(Y, YS))
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
perm_in(XS, cons(Y, YS)) → U3(XS, Y, YS, split_in(XS, YS1, cons(Y, YS2)))
split_in(cons(X, XS), cons(X, YS1), YS2) → U2(X, XS, YS1, YS2, split_in(XS, YS1, YS2))
split_in(XS, nil, XS) → split_out(XS, nil, XS)
U2(X, XS, YS1, YS2, split_out(XS, YS1, YS2)) → split_out(cons(X, XS), cons(X, YS1), YS2)
U3(XS, Y, YS, split_out(XS, YS1, cons(Y, YS2))) → U4(XS, Y, YS, YS1, YS2, append_in(YS1, YS2, ZS))
append_in(cons(X, XS1), XS2, cons(X, YS)) → U1(X, XS1, XS2, YS, append_in(XS1, XS2, YS))
append_in(nil, XS, XS) → append_out(nil, XS, XS)
U1(X, XS1, XS2, YS, append_out(XS1, XS2, YS)) → append_out(cons(X, XS1), XS2, cons(X, YS))
U4(XS, Y, YS, YS1, YS2, append_out(YS1, YS2, ZS)) → U5(XS, Y, YS, perm_in(ZS, YS))
perm_in(nil, nil) → perm_out(nil, nil)
U5(XS, Y, YS, perm_out(ZS, YS)) → perm_out(XS, cons(Y, YS))
PERM_IN(XS, cons(Y, YS)) → U31(XS, Y, YS, split_in(XS, YS1, cons(Y, YS2)))
PERM_IN(XS, cons(Y, YS)) → SPLIT_IN(XS, YS1, cons(Y, YS2))
SPLIT_IN(cons(X, XS), cons(X, YS1), YS2) → U21(X, XS, YS1, YS2, split_in(XS, YS1, YS2))
SPLIT_IN(cons(X, XS), cons(X, YS1), YS2) → SPLIT_IN(XS, YS1, YS2)
U31(XS, Y, YS, split_out(XS, YS1, cons(Y, YS2))) → U41(XS, Y, YS, YS1, YS2, append_in(YS1, YS2, ZS))
U31(XS, Y, YS, split_out(XS, YS1, cons(Y, YS2))) → APPEND_IN(YS1, YS2, ZS)
APPEND_IN(cons(X, XS1), XS2, cons(X, YS)) → U11(X, XS1, XS2, YS, append_in(XS1, XS2, YS))
APPEND_IN(cons(X, XS1), XS2, cons(X, YS)) → APPEND_IN(XS1, XS2, YS)
U41(XS, Y, YS, YS1, YS2, append_out(YS1, YS2, ZS)) → U51(XS, Y, YS, perm_in(ZS, YS))
U41(XS, Y, YS, YS1, YS2, append_out(YS1, YS2, ZS)) → PERM_IN(ZS, YS)
perm_in(XS, cons(Y, YS)) → U3(XS, Y, YS, split_in(XS, YS1, cons(Y, YS2)))
split_in(cons(X, XS), cons(X, YS1), YS2) → U2(X, XS, YS1, YS2, split_in(XS, YS1, YS2))
split_in(XS, nil, XS) → split_out(XS, nil, XS)
U2(X, XS, YS1, YS2, split_out(XS, YS1, YS2)) → split_out(cons(X, XS), cons(X, YS1), YS2)
U3(XS, Y, YS, split_out(XS, YS1, cons(Y, YS2))) → U4(XS, Y, YS, YS1, YS2, append_in(YS1, YS2, ZS))
append_in(cons(X, XS1), XS2, cons(X, YS)) → U1(X, XS1, XS2, YS, append_in(XS1, XS2, YS))
append_in(nil, XS, XS) → append_out(nil, XS, XS)
U1(X, XS1, XS2, YS, append_out(XS1, XS2, YS)) → append_out(cons(X, XS1), XS2, cons(X, YS))
U4(XS, Y, YS, YS1, YS2, append_out(YS1, YS2, ZS)) → U5(XS, Y, YS, perm_in(ZS, YS))
perm_in(nil, nil) → perm_out(nil, nil)
U5(XS, Y, YS, perm_out(ZS, YS)) → perm_out(XS, cons(Y, YS))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
PERM_IN(XS, cons(Y, YS)) → U31(XS, Y, YS, split_in(XS, YS1, cons(Y, YS2)))
PERM_IN(XS, cons(Y, YS)) → SPLIT_IN(XS, YS1, cons(Y, YS2))
SPLIT_IN(cons(X, XS), cons(X, YS1), YS2) → U21(X, XS, YS1, YS2, split_in(XS, YS1, YS2))
SPLIT_IN(cons(X, XS), cons(X, YS1), YS2) → SPLIT_IN(XS, YS1, YS2)
U31(XS, Y, YS, split_out(XS, YS1, cons(Y, YS2))) → U41(XS, Y, YS, YS1, YS2, append_in(YS1, YS2, ZS))
U31(XS, Y, YS, split_out(XS, YS1, cons(Y, YS2))) → APPEND_IN(YS1, YS2, ZS)
APPEND_IN(cons(X, XS1), XS2, cons(X, YS)) → U11(X, XS1, XS2, YS, append_in(XS1, XS2, YS))
APPEND_IN(cons(X, XS1), XS2, cons(X, YS)) → APPEND_IN(XS1, XS2, YS)
U41(XS, Y, YS, YS1, YS2, append_out(YS1, YS2, ZS)) → U51(XS, Y, YS, perm_in(ZS, YS))
U41(XS, Y, YS, YS1, YS2, append_out(YS1, YS2, ZS)) → PERM_IN(ZS, YS)
perm_in(XS, cons(Y, YS)) → U3(XS, Y, YS, split_in(XS, YS1, cons(Y, YS2)))
split_in(cons(X, XS), cons(X, YS1), YS2) → U2(X, XS, YS1, YS2, split_in(XS, YS1, YS2))
split_in(XS, nil, XS) → split_out(XS, nil, XS)
U2(X, XS, YS1, YS2, split_out(XS, YS1, YS2)) → split_out(cons(X, XS), cons(X, YS1), YS2)
U3(XS, Y, YS, split_out(XS, YS1, cons(Y, YS2))) → U4(XS, Y, YS, YS1, YS2, append_in(YS1, YS2, ZS))
append_in(cons(X, XS1), XS2, cons(X, YS)) → U1(X, XS1, XS2, YS, append_in(XS1, XS2, YS))
append_in(nil, XS, XS) → append_out(nil, XS, XS)
U1(X, XS1, XS2, YS, append_out(XS1, XS2, YS)) → append_out(cons(X, XS1), XS2, cons(X, YS))
U4(XS, Y, YS, YS1, YS2, append_out(YS1, YS2, ZS)) → U5(XS, Y, YS, perm_in(ZS, YS))
perm_in(nil, nil) → perm_out(nil, nil)
U5(XS, Y, YS, perm_out(ZS, YS)) → perm_out(XS, cons(Y, YS))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDP
APPEND_IN(cons(X, XS1), XS2, cons(X, YS)) → APPEND_IN(XS1, XS2, YS)
perm_in(XS, cons(Y, YS)) → U3(XS, Y, YS, split_in(XS, YS1, cons(Y, YS2)))
split_in(cons(X, XS), cons(X, YS1), YS2) → U2(X, XS, YS1, YS2, split_in(XS, YS1, YS2))
split_in(XS, nil, XS) → split_out(XS, nil, XS)
U2(X, XS, YS1, YS2, split_out(XS, YS1, YS2)) → split_out(cons(X, XS), cons(X, YS1), YS2)
U3(XS, Y, YS, split_out(XS, YS1, cons(Y, YS2))) → U4(XS, Y, YS, YS1, YS2, append_in(YS1, YS2, ZS))
append_in(cons(X, XS1), XS2, cons(X, YS)) → U1(X, XS1, XS2, YS, append_in(XS1, XS2, YS))
append_in(nil, XS, XS) → append_out(nil, XS, XS)
U1(X, XS1, XS2, YS, append_out(XS1, XS2, YS)) → append_out(cons(X, XS1), XS2, cons(X, YS))
U4(XS, Y, YS, YS1, YS2, append_out(YS1, YS2, ZS)) → U5(XS, Y, YS, perm_in(ZS, YS))
perm_in(nil, nil) → perm_out(nil, nil)
U5(XS, Y, YS, perm_out(ZS, YS)) → perm_out(XS, cons(Y, YS))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
↳ PiDP
APPEND_IN(cons(X, XS1), XS2, cons(X, YS)) → APPEND_IN(XS1, XS2, YS)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPSizeChangeProof
↳ PiDP
↳ PiDP
APPEND_IN(cons(XS1), XS2) → APPEND_IN(XS1, XS2)
From the DPs we obtained the following set of size-change graphs:
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
SPLIT_IN(cons(X, XS), cons(X, YS1), YS2) → SPLIT_IN(XS, YS1, YS2)
perm_in(XS, cons(Y, YS)) → U3(XS, Y, YS, split_in(XS, YS1, cons(Y, YS2)))
split_in(cons(X, XS), cons(X, YS1), YS2) → U2(X, XS, YS1, YS2, split_in(XS, YS1, YS2))
split_in(XS, nil, XS) → split_out(XS, nil, XS)
U2(X, XS, YS1, YS2, split_out(XS, YS1, YS2)) → split_out(cons(X, XS), cons(X, YS1), YS2)
U3(XS, Y, YS, split_out(XS, YS1, cons(Y, YS2))) → U4(XS, Y, YS, YS1, YS2, append_in(YS1, YS2, ZS))
append_in(cons(X, XS1), XS2, cons(X, YS)) → U1(X, XS1, XS2, YS, append_in(XS1, XS2, YS))
append_in(nil, XS, XS) → append_out(nil, XS, XS)
U1(X, XS1, XS2, YS, append_out(XS1, XS2, YS)) → append_out(cons(X, XS1), XS2, cons(X, YS))
U4(XS, Y, YS, YS1, YS2, append_out(YS1, YS2, ZS)) → U5(XS, Y, YS, perm_in(ZS, YS))
perm_in(nil, nil) → perm_out(nil, nil)
U5(XS, Y, YS, perm_out(ZS, YS)) → perm_out(XS, cons(Y, YS))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
SPLIT_IN(cons(X, XS), cons(X, YS1), YS2) → SPLIT_IN(XS, YS1, YS2)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPSizeChangeProof
↳ PiDP
SPLIT_IN(cons(XS)) → SPLIT_IN(XS)
From the DPs we obtained the following set of size-change graphs:
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
PERM_IN(XS, cons(Y, YS)) → U31(XS, Y, YS, split_in(XS, YS1, cons(Y, YS2)))
U31(XS, Y, YS, split_out(XS, YS1, cons(Y, YS2))) → U41(XS, Y, YS, YS1, YS2, append_in(YS1, YS2, ZS))
U41(XS, Y, YS, YS1, YS2, append_out(YS1, YS2, ZS)) → PERM_IN(ZS, YS)
perm_in(XS, cons(Y, YS)) → U3(XS, Y, YS, split_in(XS, YS1, cons(Y, YS2)))
split_in(cons(X, XS), cons(X, YS1), YS2) → U2(X, XS, YS1, YS2, split_in(XS, YS1, YS2))
split_in(XS, nil, XS) → split_out(XS, nil, XS)
U2(X, XS, YS1, YS2, split_out(XS, YS1, YS2)) → split_out(cons(X, XS), cons(X, YS1), YS2)
U3(XS, Y, YS, split_out(XS, YS1, cons(Y, YS2))) → U4(XS, Y, YS, YS1, YS2, append_in(YS1, YS2, ZS))
append_in(cons(X, XS1), XS2, cons(X, YS)) → U1(X, XS1, XS2, YS, append_in(XS1, XS2, YS))
append_in(nil, XS, XS) → append_out(nil, XS, XS)
U1(X, XS1, XS2, YS, append_out(XS1, XS2, YS)) → append_out(cons(X, XS1), XS2, cons(X, YS))
U4(XS, Y, YS, YS1, YS2, append_out(YS1, YS2, ZS)) → U5(XS, Y, YS, perm_in(ZS, YS))
perm_in(nil, nil) → perm_out(nil, nil)
U5(XS, Y, YS, perm_out(ZS, YS)) → perm_out(XS, cons(Y, YS))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
PERM_IN(XS, cons(Y, YS)) → U31(XS, Y, YS, split_in(XS, YS1, cons(Y, YS2)))
U31(XS, Y, YS, split_out(XS, YS1, cons(Y, YS2))) → U41(XS, Y, YS, YS1, YS2, append_in(YS1, YS2, ZS))
U41(XS, Y, YS, YS1, YS2, append_out(YS1, YS2, ZS)) → PERM_IN(ZS, YS)
split_in(cons(X, XS), cons(X, YS1), YS2) → U2(X, XS, YS1, YS2, split_in(XS, YS1, YS2))
split_in(XS, nil, XS) → split_out(XS, nil, XS)
append_in(cons(X, XS1), XS2, cons(X, YS)) → U1(X, XS1, XS2, YS, append_in(XS1, XS2, YS))
append_in(nil, XS, XS) → append_out(nil, XS, XS)
U2(X, XS, YS1, YS2, split_out(XS, YS1, YS2)) → split_out(cons(X, XS), cons(X, YS1), YS2)
U1(X, XS1, XS2, YS, append_out(XS1, XS2, YS)) → append_out(cons(X, XS1), XS2, cons(X, YS))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
PERM_IN(XS) → U31(split_in(XS))
U31(split_out(YS1, cons(YS2))) → U41(append_in(YS1, YS2))
U41(append_out(ZS)) → PERM_IN(ZS)
split_in(cons(XS)) → U2(split_in(XS))
split_in(XS) → split_out(nil, XS)
append_in(cons(XS1), XS2) → U1(append_in(XS1, XS2))
append_in(nil, XS) → append_out(XS)
U2(split_out(YS1, YS2)) → split_out(cons(YS1), YS2)
U1(append_out(YS)) → append_out(cons(YS))
split_in(x0)
append_in(x0, x1)
U2(x0)
U1(x0)
U31(split_out(YS1, cons(YS2))) → U41(append_in(YS1, YS2))
split_in(XS) → split_out(nil, XS)
POL(PERM_IN(x1)) = 2 + 2·x1
POL(U1(x1)) = 2 + x1
POL(U2(x1)) = 2 + x1
POL(U31(x1)) = 2·x1
POL(U41(x1)) = 2 + 2·x1
POL(append_in(x1, x2)) = x1 + x2
POL(append_out(x1)) = x1
POL(cons(x1)) = 2 + x1
POL(nil) = 0
POL(split_in(x1)) = 1 + x1
POL(split_out(x1, x2)) = x1 + x2
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
↳ QDP
↳ DependencyGraphProof
PERM_IN(XS) → U31(split_in(XS))
U41(append_out(ZS)) → PERM_IN(ZS)
split_in(cons(XS)) → U2(split_in(XS))
append_in(cons(XS1), XS2) → U1(append_in(XS1, XS2))
append_in(nil, XS) → append_out(XS)
U2(split_out(YS1, YS2)) → split_out(cons(YS1), YS2)
U1(append_out(YS)) → append_out(cons(YS))
split_in(x0)
append_in(x0, x1)
U2(x0)
U1(x0)